export const isServer = typeof window === 'undefined';

/**
 * @title 绑定事件
 */
export const on = (function () {
  if (isServer) return;
  if (document.hasOwnProperty('addEventListener')) {
    return function (element: any, event: any, handler: Function) {
      if (element && event && handler) {
        element.addEventListener(event, handler, false);
      }
    };
  } else if (document.hasOwnProperty('attachEvent')) {
    /* 使用 attachEvent() 注册事件时，其事件处理函数的调用对象不再是当前事件对象本身，
    而是 window 对象，因此事件函数中的 this 就指向 window，而不是当前对象，如果要获
    取当前对象，应该使用 event 的 srcElement 属性。*/
    return function (element: any, event: any, handler: Function) {
      if (element && event && handler) {
        element.attachEvent('on' + event, handler);
      }
    };
  } else {
    return function (element: any, event: any, handler: Function) {
      if (element && event && handler) {
        element['on' + event] = handler;
      }
    }
  }
})();

/**
 * @title 注销事件
 */
export const off = (function () {
  if (isServer) return;
  if (document.hasOwnProperty('removeEventListener')) {
    return function (element: any, event: any, handler: Function) {
      if (element && event && handler) {
        element.removeEventListener(event, handler, false);
      }
    };
  } else if (document.hasOwnProperty('detachEvent')) {
    return function (element: any, event: any, handler: Function) {
      if (element && event && handler) {
        element.detachEvent('on' + event, handler);
      }
    };
  } else {
    // detachEvent
    return function (element: any, event: any, handler: Function) {
      if (element && event && handler) {
        element['on' + event] = handler;
      }
    }
  }
})();

/**
 * @title 仅绑定一次事件
 * @param el 
 * @param event 
 * @param fn 
 */
export const once = function (el: any, event: any, fn: Function) {
  var listener = function () {
    if (fn) {
      // @ts-ignore
      fn.apply(this, arguments);
    }
    off && off(el, event, listener);
  };
  on && on(el, event, listener);
};


// $('.slimscroll-noti').slimScroll({
//   height: '208px',
//   position: 'right',
//   size: "5px",
//   color: '#98a6ad',
//   wheelStep: 10
// });